InitialData <- function(countryrlt,country,newdata,regime = 'rawrlt',
                        endovar_tmp,delta = 0.01,impvar = NULL, k = 1, eps = NULL){
  # k: 第几个残差. v1,v2,..., 依次轮一遍
  # 初始化一个数据框存预测的数据
  library(stringr)
  newpred_bench <- matrix(NA, nrow = 1, ncol = length(endovar_tmp)) %>% as.data.frame()
  newpred_imp <- matrix(NA, nrow = 1, ncol = length(endovar_tmp)) %>% as.data.frame()
  names(newpred_bench) <- names(newpred_imp) <- endovar_tmp
  for (i in 1:length(endovar_tmp)) {
    # browser()
    # y = X * beta + e
    # 基准脉冲和有冲击脉冲的区别在于newdata的不同，第一期大家都是一样的，然后newdata开始分化。
    # 具体调用函数时，只能取，newpred_bench，或newpred_imp中的一个。
    if (is.null(eps)) eps <- sample(residuals(countryrlt[[country]][[regime]]$varresult[[i]]),1)
    newpred_bench[1,i] <- newpred_imp[1,i] <- as.matrix(newdata[[country]]) %*% 
      matrix(coef(countryrlt[[country]][[regime]]$varresult[[i]]),ncol = 1) + eps
    
    # 检测到脉冲变量，然后在这个变量的第一期施加冲击delta, 其他变量任何时期不施加
    if (!is.null(impvar)){
      place <- which(str_detect(impvar, endovar_tmp))
      if (i == place){
        newpred_imp[1,i] <- as.matrix(newdata[[country]]) %*% 
          matrix(coef(countryrlt[[country]][[regime]]$varresult[[i]]),ncol = 1) + 
          residuals(countryrlt[[country]][[regime]]$varresult[[i]])[k] + delta
      }else {
        newpred_imp[1,i] <- newpred_bench[1,i]
      }
    }
  }
  return(list(newpred_bench = newpred_bench, newpred_imp = newpred_imp, eps = eps))
}
